package com.ls.lsqc.modules.sys.utils;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.ls.lsqc.common.mapper.JsonMapper;
import com.ls.lsqc.common.utils.CacheUtils;
import com.ls.lsqc.common.utils.Constants;
import com.ls.lsqc.common.utils.SpringContextHolder;
import com.ls.lsqc.common.utils.StringUtils;
import com.ls.lsqc.modules.sys.dao.DesignoptionDao;
import com.ls.lsqc.modules.sys.dao.SystemMessageDao;
import com.ls.lsqc.modules.sys.entity.SystemMessage;
import com.ls.lsqc.modules.sys.entity.SystemMessage;

import java.util.List;
import java.util.Map;

/**
 * 设计项目工具类
 *
 * @author 于辉
 * @version 2017-06-22
 */
public class SystemMessageUtils {

	private static SystemMessageDao systemMessageDao = SpringContextHolder.getBean(SystemMessageDao.class);

	public static final String CACHE_MESSAGE_MAP = "messageMap";

	public static final String CACHE_MESSAGE_VALUE_MAP = "messageValueMap";

	/**
	 * @Title: putSystemMessage
	 * @Description: 服装款式设计项目全量放入缓存
	 * @author 于辉
	 *
	 */
	public static void putMessageCache() {
		@SuppressWarnings("unchecked")
		Map<String, List<SystemMessage>> sysMessageMap = (Map<String, List<SystemMessage>>) CacheUtils.get(CACHE_MESSAGE_MAP);
		if (sysMessageMap == null) {
			sysMessageMap = Maps.newHashMap();
			for (SystemMessage systemMessage : systemMessageDao.findAllList(new SystemMessage())) {
				List<SystemMessage> dictList = sysMessageMap.get(systemMessage.getMessageKey ());
				if (dictList != null) {
					dictList.add(systemMessage);
					sysMessageMap.put(systemMessage.getMessageKey(), Lists.newArrayList(dictList));
				} else {
					sysMessageMap.put(systemMessage.getMessageKey(), Lists.newArrayList(systemMessage));
				}

			}
			CacheUtils.put(CACHE_MESSAGE_VALUE_MAP, sysMessageMap);
		}
	}

	/**
	 * @Title: getDesignoptionList
	 * @Description: 返回服装款式设计项目列表
	 * @author 于辉
	 *
	 * @param code
	 * @return List<Designoption>
	 *
	 */

	public static List<SystemMessage> getMessageList(String code) {

		@SuppressWarnings("unchecked")
		Map<String, List<SystemMessage>> sysMessageMap = (Map<String, List<SystemMessage>>) CacheUtils.get(CACHE_MESSAGE_VALUE_MAP);
		if (sysMessageMap == null) {
			sysMessageMap = Maps.newHashMap();
			for (SystemMessage systemMessage : systemMessageDao.findAllList(new SystemMessage())) {
				List<SystemMessage> dictList = sysMessageMap.get(systemMessage.getMessageKey ());
				if (dictList != null) {
					dictList.add(systemMessage);
				} else {
					sysMessageMap.put(systemMessage.getMessageKey(), Lists.newArrayList(systemMessage));
				}
			}
			CacheUtils.put(CACHE_MESSAGE_VALUE_MAP, sysMessageMap);
		}
		List<SystemMessage> messageList = sysMessageMap.get(code);

		if (messageList == null) {
			messageList = Lists.newArrayList();
		} else {
			for (SystemMessage message : messageList) {
					message.setItemName (message.getMessageValue ());
			}
		}
		return messageList;
	}

	/**
	 * @Title: getDesignoptionEntity @Description: 款式设计项目Entity
	 * @author 于辉
	 *
	 * @param value
	 * @return Designoption
	 *
	 * @return List<Designoption>
	 */

	public static SystemMessage getMessageEntity(String value) {

		Map<String, SystemMessage> stringSystemMessageMap = (Map<String, SystemMessage>) CacheUtils.get(CACHE_MESSAGE_VALUE_MAP);

		if (stringSystemMessageMap == null) {

			stringSystemMessageMap = Maps.newHashMap();
			for (SystemMessage systemMessage : systemMessageDao.findAllList(new SystemMessage())) {
				stringSystemMessageMap.put(systemMessage.getMessageKey (), systemMessage);
			}
			CacheUtils.put(CACHE_MESSAGE_VALUE_MAP, stringSystemMessageMap);

		}

		SystemMessage returnSystemMessage = stringSystemMessageMap.get(value);

		if (returnSystemMessage != null) {
			return returnSystemMessage;
		} else {
			return new SystemMessage();
		}

	}

	/**
	 * 返回款式设计项目名称
	 *
	 * @param value
	 * @return
	 */
	public static String getMessageName(String value) {

		Map<String, SystemMessage> messageMap = (Map<String, SystemMessage>) CacheUtils.get(CACHE_MESSAGE_VALUE_MAP);

		if (messageMap == null) {

			messageMap = Maps.newHashMap();
			for (SystemMessage systemMessage : systemMessageDao.findAllList(new SystemMessage())) {
				messageMap.put(systemMessage.getMessageKey (), systemMessage);
			}
			CacheUtils.put(CACHE_MESSAGE_VALUE_MAP, messageMap);

		}

		SystemMessage returnSystemMessage = messageMap.get(value);

		if (returnSystemMessage != null) {
			return returnSystemMessage.getMessageValue ();
		} else {
			return "";
		}
	}
	/**
	 * @Title: getDesignoptionListJson @Description: 返回服装款式设计项目列表（JSON）
	 * @author 于辉
	 *
	 * @param code @return
	 *
	 * @return String @throws
	 */
	public static String getSystemMessageListJson(String code) {
		return JsonMapper.toJsonString(getMessageList(code));
	}

}
